/**
 * Universidad del Valle de Guatemala
 * Facultad de Ingenieria
 * Departamento de Ciencias de la Computacion
 * Algoritmos y Estructuras de Datos
 * Hoja de Trabajo 1
 * Diego Garcia Zamora
 * Carne no. 08317
 */

package PaqueteRadio;
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;

/**
 *  Interfaz de usuario para la implementacion de la clase radio
 * @author Diego Garcia
 */
public class InterfazRadio extends JFrame implements ActionListener{

    //-----------------------------------------------------------
    // Constantes
    //-----------------------------------------------------------
    private static final String UNO = "uno";
    private static final String DOS = "dos";
    private static final String TRES = "tres";
    private static final String CUATRO = "cuatro";
    private static final String CINCO = "cinco";
    private static final String SEIS = "seis";
    private static final String SIETE = "siete";
    private static final String OCHO = "ocho";
    private static final String NUEVE = "nueve";
    private static final String DIEZ = "diez";
    private static final String ONCE = "once";
    private static final String DOCE = "doce";
    private static final String ADELANTE = "adelante";
    private static final String ATRAS = "atras";
    private static final String ENCENDIDO = "encendido";
    private static final String FRECUENCIA = "frecuencia";
    private static final String GUARDAR = "guardar";

    //-----------------------------------------------------------
    // Atributos
    //-----------------------------------------------------------
    // para la conexion con la implementacion
    private Radio radio;

    // para la creacion de interfaz
    private JButton btn1;
    private JButton btn2;
    private JButton btn3;
    private JButton btn4;
    private JButton btn5;
    private JButton btn6;
    private JButton btn7;
    private JButton btn8;
    private JButton btn9;
    private JButton btn10;
    private JButton btn11;
    private JButton btn12;
    private JButton btnEncendido;
    private JButton btnFrecuencia;
    private JButton btnAdelante;
    private JButton btnAtras;
    private JButton btnGuardar;
    private JTextField txtFrecuencia;
    private JTextField txtEmisora;
    private JLabel lblNombre;
    private JPanel panelEncendido;
    private JPanel panelEstacion;
    private JPanel panelBotones;

    //----------------------------------------------------------
    // Constructor
    //----------------------------------------------------------
    public InterfazRadio(){
        //se crea la ventana con todas las especificacioens
        setTitle("Radio SungSung");
        setSize(500,300);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setLayout(new BorderLayout());

        //se inicializa la clase radio
        radio = new Radio();

        //se crean los paneles y se les dice el tipo de despliegue
        panelEncendido = new JPanel();
        panelEncendido.setLayout(new FlowLayout(FlowLayout.CENTER));
        panelEstacion = new JPanel();
        panelEstacion.setLayout(new FlowLayout(FlowLayout.CENTER));
        panelBotones = new JPanel();
        panelBotones.setLayout(new GridLayout(3,6));

        //se cargan las imagenes en iconos
        ImageIcon iconoAtras = new ImageIcon( "data/atras.jpg" );
        ImageIcon iconoAdelante = new ImageIcon( "data/adelante.jpg" );
        ImageIcon iconoIO = new ImageIcon( "data/io.jpg" );
        ImageIcon iconoSung = new ImageIcon( "data/sung.jpg" );

        //se inicializan los botones
        btn1 = new JButton("1");
        btn2 = new JButton("2");
        btn3 = new JButton("3");
        btn4 = new JButton("4");
        btn5 = new JButton("5");
        btn6 = new JButton("6");
        btn7 = new JButton("7");
        btn8 = new JButton("8");
        btn9 = new JButton("9");
        btn10 = new JButton("10");
        btn11 = new JButton("11");
        btn12 = new JButton("12");
        btnAdelante = new JButton("");
        btnAdelante.setIcon(iconoAdelante);
        btnAtras = new JButton("");
        btnAtras.setIcon(iconoAtras);
        btnEncendido = new JButton("");
        btnEncendido.setIcon(iconoIO);
        btnFrecuencia = new JButton("FM/AM");
        btnGuardar = new JButton("Guardar");

        //se agregan los listeners
        btn1.addActionListener(this);
        btn1.setActionCommand(UNO);
        btn2.addActionListener(this);
        btn2.setActionCommand(DOS);
        btn3.addActionListener(this);
        btn3.setActionCommand(TRES);
        btn4.addActionListener(this);
        btn4.setActionCommand(CUATRO);
        btn5.addActionListener(this);
        btn5.setActionCommand(CINCO);
        btn6.addActionListener(this);
        btn6.setActionCommand(SEIS);
        btn7.addActionListener(this);
        btn7.setActionCommand(SIETE);
        btn8.addActionListener(this);
        btn8.setActionCommand(OCHO);
        btn9.addActionListener(this);
        btn9.setActionCommand(NUEVE);
        btn10.addActionListener(this);
        btn10.setActionCommand(DIEZ);
        btn11.addActionListener(this);
        btn11.setActionCommand(ONCE);
        btn12.addActionListener(this);
        btn12.setActionCommand(DOCE);
        btnAdelante.addActionListener(this);
        btnAdelante.setActionCommand(ADELANTE);
        btnAtras.addActionListener(this);
        btnAtras.setActionCommand(ATRAS);
        btnFrecuencia.addActionListener(this);
        btnFrecuencia.setActionCommand(FRECUENCIA);
        btnEncendido.addActionListener(this);
        btnEncendido.setActionCommand(ENCENDIDO);
        btnGuardar.addActionListener(this);
        btnGuardar.setActionCommand(GUARDAR);

        //se convierte la emisora de float a String
        String emi = radio.darEmisora() + "";

        //se crea un formato para los text fields
        Font formato = new Font("Verdana", Font.BOLD, 25);

        //se inicializan los campos
        lblNombre = new JLabel("");
        lblNombre.setIcon(iconoSung);
        txtEmisora = new JTextField(emi);
        txtEmisora.setEditable(false);
        txtEmisora.setFont(formato);
        txtEmisora.setHorizontalAlignment(JTextField.CENTER);
        txtFrecuencia = new JTextField(radio.darFrecuencia());
        txtFrecuencia.setEditable(false);
        txtFrecuencia.setFont(formato);
        txtFrecuencia.setHorizontalAlignment(JTextField.CENTER);

        //se agregan a los paneles
        //panel estacion
        btnEncendido.setPreferredSize(new Dimension(100, 60));
        panelEncendido.add(btnEncendido);
        lblNombre.setPreferredSize(new Dimension(350, 60));
        panelEncendido.add(lblNombre);
        //panel estacion
        btnAtras.setPreferredSize(new Dimension(50,100));
        panelEstacion.add(btnAtras);
        btnFrecuencia.setPreferredSize(new Dimension(100, 100));
        panelEstacion.add(btnFrecuencia);
        btnAdelante.setPreferredSize(new Dimension(50,100));
        panelEstacion.add(btnAdelante);
        txtFrecuencia.setPreferredSize(new Dimension(100, 100));
        panelEstacion.add(txtFrecuencia);
        txtEmisora.setPreferredSize(new Dimension(150, 100));
        panelEstacion.add(txtEmisora);
        //panel botones
        panelBotones.add(btn1);
        panelBotones.add(btn2);
        panelBotones.add(btn3);
        panelBotones.add(btn4);
        panelBotones.add(btn5);
        panelBotones.add(btn6);
        panelBotones.add(btn7);
        panelBotones.add(btn8);
        panelBotones.add(btn9);
        panelBotones.add(btn10);
        panelBotones.add(btn11);
        panelBotones.add(btn12);
        panelBotones.add(new JLabel());
        panelBotones.add(new JLabel());
        panelBotones.add(btnGuardar);
        panelBotones.add(new JLabel());
        panelBotones.add(new JLabel());
        panelBotones.add(new JLabel());

        //se agregan los paneles a la ventana
        add(panelEncendido, BorderLayout.NORTH);
        add(panelEstacion, BorderLayout.CENTER);
        add(panelBotones, BorderLayout.SOUTH);
    }

    /**
     * Cambia la emisora segun el boton presionado
     * @param boton el que se presiono
     */
    public void cambioEmisora(int boton){
        radio.seleccionarEmisora(boton);
        String nuevo = radio.darEmisora() + "";
        txtEmisora.setText(nuevo);
    }

    /**
     * avanza hacia adelante o atras en la frecuencia actual
     * @param fwd true si es para adelante. false si es para atras
     */
    public void emisora(boolean fwd){
        radio.cambiarEmisora(fwd);
        String nuevo = radio.darEmisora() + "";
        txtEmisora.setText(nuevo);
    }

    /**
     * cambia la frecuencia entre fm y am
     */
    public void cambioFrecuencia(){
        radio.cambiarFrecuencia();
        String nuevo = radio.darEmisora() + "";
        txtFrecuencia.setText(radio.darFrecuencia());
        txtEmisora.setText(nuevo);
    }

    /**
     * guarda una frecuencia en una posicion especificada por el usuario
     */
    public void guardarEmisora(){
        float actual = radio.darEmisora();
        String respuesta = JOptionPane.showInputDialog(this, "Ingrese la posicion " +
                "donde desea \n guardar la emisora: ", "Guardar", JOptionPane.INFORMATION_MESSAGE);
        
        int pos = Integer.parseInt(respuesta);
        pos --;

        if(pos>=0 && pos<13) radio.guardarEmisora(pos, actual);
        else JOptionPane.showMessageDialog(this, "La posicion que ingreso no existe.", "Error", JOptionPane.ERROR_MESSAGE);
    }

    /**
     * apaga o enciende el radio
     */
    public void apagar(){
        radio.energia();
        if(radio.estaEncendido()==false){
            txtFrecuencia.setText(" ");
            txtEmisora.setText(" ");
        }
        else{
            txtFrecuencia.setText(radio.darFrecuencia());
            String actual = radio.darEmisora() + "";
            txtEmisora.setText(actual);
        }
    }
    /**
     * dice que debe hacer cada boton
     * @param evento que boton se acciono
     */
    public void actionPerformed(ActionEvent evento) {
        String comando = evento.getActionCommand();

        if(UNO.equals(comando)) cambioEmisora(0);
        else if(DOS.equals(comando)) cambioEmisora(1);
        else if(TRES.equals(comando)) cambioEmisora(2);
        else if(CUATRO.equals(comando)) cambioEmisora(3);
        else if(CINCO.equals(comando)) cambioEmisora(4);
        else if(SEIS.equals(comando)) cambioEmisora(5);
        else if(SIETE.equals(comando)) cambioEmisora(6);
        else if(OCHO.equals(comando)) cambioEmisora(7);
        else if(NUEVE.equals(comando)) cambioEmisora(8);
        else if(DIEZ.equals(comando)) cambioEmisora(9);
        else if(ONCE.equals(comando)) cambioEmisora(10);
        else if(DOCE.equals(comando)) cambioEmisora(11);
        else if(ADELANTE.equals(comando)) emisora(true);
        else if(ATRAS.equals(comando)) emisora(false);
        else if(FRECUENCIA.equals(comando)) cambioFrecuencia();
        else if(GUARDAR.equals(comando)) guardarEmisora();
        else if(ENCENDIDO.equals(comando)) apagar();
    }

    /**
     * programa principal
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        InterfazRadio principal = new InterfazRadio();
        principal.setVisible(true);
    }
}